class RequisicionController < ApplicationController

  def index
    
    # ejecutivo
    if perfil_ejecutivo?
      ejecutivo
      
    elsif mando_medio?
      mando_medio
      
    elsif perfil_asistente?
      asistente
      
      render :action => 'asistente'
      
    elsif perfil_captura?
    else
      @requisiciones = RequisicionProducto.paginate :page => params[:page], :per_page => DEFAULT_PER_PAGE, :order => 'updated_at DESC'
    end
        
  end

  def show
    @requisicion = RequisicionProducto.find(params[:id])
    
  end

  def edit
    @requisicion = RequisicionProducto.find(params[:id])
    @productos = Producto.cuervo
    
  end

  def update
    @requisicion = RequisicionProducto.find(params[:id])
    
    if @requisicion.update_attributes(params[:requisicion])
      flash[:notice] = "Successfully created..."
      
      redirect_to :action => "index"
    else
      @productos = Producto.cuervo
      
      render :action => "edit", :id => @requisicion
    end
    
  end
  
  def new
    @requisicion = RequisicionProducto.new
    @requisicion.item_requisiciones << ItemRequisicion.new
    @productos = Producto.cuervo
    
  end
  
  def create
    @requisicion = RequisicionProducto.new(params[:requisicion])
    @requisicion.solicitante_id = session[:user]
    @requisicion.status_requisicion_id = RequisicionProducto::SOLICITADA
    
    if @requisicion.save
      flash[:notice] = "Successfully created..."
      redirect_to :action => "index"
    else      
      @productos = Producto.cuervo
      
      render :action => "new"
    end
  end
  
  def ejecutivo
    conditions = {}
    conditions[:solicitante_id] = session[:user]
    
    @requisiciones = RequisicionProducto.paginate :page => params[:page], :per_page => DEFAULT_PER_PAGE,
      :conditions => conditions, :order => 'id'
    
  end
  
  def mando_medio
    conditions = {}
    usuario = Ejecutivo.find(session[:user])
    children = find_children_ids(usuario)
    conditions[:solicitante_id] = children
    
    @requisiciones = RequisicionProducto.paginate :page => params[:page], :per_page => DEFAULT_PER_PAGE,
      :conditions => conditions, :order => 'id'
    
  end
  
  def asistente
    usuario_actual = Ejecutivo.find(session[:user])
    jefe_inmediato = Ejecutivo.find(usuario_actual.reporta_a_id)
    these_children = find_children_ids(jefe_inmediato)
    
    conditions = {}
    conditions[:solicitante_id] = these_children
    conditions[:status_requisicion_id] = RequisicionProducto::AUTORIZADA
    
    @requisiciones = RequisicionProducto.paginate :page => params[:page],
      :per_page => DEFAULT_PER_PAGE,
      :conditions => conditions, :order => 'id'
    
  end
  
  def tramitar
    raise
    @requisicion = RequisicionProducto.find(params[:id])
    
    # nueva orden de salida
    @orden = OrdenSalida.new
    
    # convertir cajas a botellas
    @requisicion.item_requisiciones.each do |d|
      if d.unidad_medida_id == UnidadMedida::CAJA
        producto = Producto.find(d.producto_id)
        
        @orden.agregar_detalle(producto, d.cantidad * producto.botellas_caja)
        
      else
        @orden.agregar_detalle(producto, d.cantidad)
        
      end
    end
    
    # generar orden de salida
    @orden.save
    
    # actualizar status de requisicion
    @requisicion.status_requisicion_id = RequisicionProducto::ENTREGADA
    @requisicion.save
    
    # anything
    
  end
end
